单值(唯一值)专题图 Sample详情

最后更新时间:2019年7月5日

单值专题图又称唯一值专题图,在单值专题图上,是用不同的颜色或图案表示属性表中指定字段的每一个不同的值,强调数据中的类别差异。比如在制作土地利用单值专题图时,可以用特定的颜色来表示每一种土地利用类型;在行政区划图中,可以对每个行政区设置不同的图形参数来体现各个区的大小范围。

1

获取矢量图层

MGSMap *map=[mapView map];
MGSVectorLayer *layer=(MGSVectorLayer *)[map getLayerAtIndex:i];

2

获取图层某一字段属性值

在创建单值专题图之前,不仅要确定对哪一个图层进行创建,还要确定对此图层中哪一个属性字段的值进行创建。所以需要对选定图层中所有要素,获取选定的字段的属性值,作为单值专题图创建的数据来源。一般采用地图要素查询功能获取。

//查询要素
MGSFeaturePagedResult *queryResult=[featureQuery query];
//创建数组用来存储查询得到的数据
NSMutableArray *selectFieldValueArr=[[NSMutableArray alloc] init];
//遍历所有的要素
for (int i=0; i < queryResult.pageCount; i++) {
    //返回页码对应的结果,页码从一开始计数
    NSArray<MGSFeature *> *featureArray=[queryResult getPageWithPageNumber:i+1];
    //对每一页获取要素
    for (int j=0; j < [featureArray count]; j++) {
        //获取要素
        MGSFeature *feature=featureArray[j];
        //获取属性字典
        NSDictionary<NSString *,NSString *> *featureAtt=[feature attributes];
        //获取属性值
        NSString *fieldValue1=[featureAtt objectForKey:selectFieldName];
        //存到数组中
        [selectFieldValueArr addObject:fieldValue1];
    }
}

3

创建几何图形信息

为选定图层中的所有要素创建几何图形信息(GeomInfo),在此以区图层为例。

//创建区几何图形信息对象
MGSRegInfo *regInfo=[[MGSRegInfo alloc] init];
[regInfo setFillClr:(int)(1 + (arc4random() % (1500 - 1 + 1)))];  //设置填充颜色(参考当前使用的MapGIS颜色库颜色编号)

4

创建单值专题图绘制信息对象

针对图层中每一个地图要素创建单值专题图绘制信息对象(UniqueThemeInfo),用来接收几何图形信息,并为其设置属性值。

//创建单值专题图绘制信息对象
MGSUniqueThemeInfo *uniqueThemeInfo=[[MGSUniqueThemeInfo alloc] init];
[uniqueThemeInfo setMaxScale:0];    //最大显示比
[uniqueThemeInfo setMinScale:0];    //最小显示比
[uniqueThemeInfo setIsVisible:YES]; //可见性
//设置名称
[uniqueThemeInfo setCaption:[NSString stringWithFormat:@"第%d个",i]];
//设置值,这里设置value时要根据uniqueTheme设置的Expression属性字段来,并且要与每个要素的属性值一一对应
[uniqueThemeInfo setValue:_selectFieldValueArr[i]];
//为专题图信息设置图形信息
[uniqueThemeInfo setGeoInfo:regInfo];

5

创建单值专题图对象

创建单值专题图对象,设置名称、字段表达式等参数,并且添加所有要素对应的绘制信息对象(uniqueThemeInfo)。

//创建单值专题图对象
MGSUniqueTheme *uniqueTheme=[[MGSUniqueTheme alloc] init];
//为单值专题图对象添加项,即设置绘制信息
[_uniqueTheme append:uniqueThemeInfo];          
[_uniqueTheme setExpression:selectFieldName];  //设置字段表达式
[_uniqueTheme setName:@"单值专题图"];            //名称
[_uniqueTheme setVisible:YES];                  //可见性

6

显示专题图

获取专题图集合Thems,调用其append方法添加专题图。

// 将专题图添加到对应矢量图层上
[[mapLayer themes] append:uniqueTheme];
[mapView forceRefresh];

实现效果如下图所示:

单值专题图.jpg